package com.sais.manage.boot.building.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sais.manage.boot.building.dto.BatchRoomUser;
import com.sais.manage.boot.building.dto.RoomBatchSaveDTO;
import com.sais.manage.boot.building.dto.RoomDTO;
import com.sais.manage.boot.building.dto.RoomSaveDTO;
import com.sais.manage.boot.building.dto.RoomSearchDTO;
import com.sais.manage.boot.building.dto.UserRoomDTO;
import com.sais.manage.boot.platform.entity.User;

import java.util.List;

/**
 * 宿舍管理系统-房间 service 接口
 *
 * @author zhang
 * @date 2019/11/30
 **/
public interface IRoomService {

    /**
     * 房间 保存
     *
     * @param roomSaveDTO
     * @return
     */
    boolean saveRoom(RoomSaveDTO roomSaveDTO);

    /**
     * 房间 更新
     *
     * @param roomSaveDTO
     * @return
     */
    boolean updateRoom(RoomSaveDTO roomSaveDTO);

    /**
     * 房间 添加
     *
     * @param roomSaveDTO
     * @return
     */
    boolean createRoom(RoomSaveDTO roomSaveDTO);

    /**
     * 房间删除
     *
     * @param roomId
     * @return
     */
    boolean deleteRoom(String roomId);

    /**
     * 房间查询
     *
     * @param roomId
     * @return
     */
    RoomDTO selectRoom(String roomId);

    /**
     * 房间 分页条件 查询
     *
     * @param current
     * @param size
     * @param roomSearchDTO
     * @return
     */
    Page<RoomDTO> listRoom(Integer current, Integer size, RoomSearchDTO roomSearchDTO);

    /**
     * 批量 创建房间
     *
     * @param roomBatchSaveDTO
     * @return
     */
    boolean batchSaveRoom(RoomBatchSaveDTO roomBatchSaveDTO);

    /**
     * 根据宿舍楼id 查询房间列表
     *
     * @param buildingId
     * @return
     */
    List<RoomDTO> listRoomByBuildingId(String buildingId);

    /**
     * 根据用户id 查询房间信息
     *
     * @param userId
     * @return
     */
    UserRoomDTO selectRoomByUserId(String userId);

    /**
     * 批量綁定用戶 和 房間
     *
     * @param batchRoomUser
     * @return
     */
    boolean batchBindRoomUser(BatchRoomUser batchRoomUser);

    /**
     * 批量解绑用户和房间信息
     *
     * @param users
     * @return
     */
    boolean batchUnBindRoomUser(List<User> users);
}
